#define _CRT_SECURE_NO_WARNINGS

//#include<stdbool.h>
//#include<string.h>
//#include<stdio.h>
//char str[8];
//char list[8] = { 0 };
//int len;
//void process(int start, int end)
//{
//	bool flag;
//	int len1 = strlen(list);
//	if (start > end&&len1==len-1)
//	{
//		printf("%s\n", list);
//		return;
//	}
//	else
//	{
//		for (int i = 0; i <= end; i++)
//		{
//			flag = false;
//			for (int j = 0; j < start; j++)
//			{
//				if (list[j] == str[i])
//				{
//					flag = true;
//					break;
//				}
//			}
//			if (!flag)
//			{
//				list[start] = str[i];
//				process(start + 1, end);
//			}
//		}
//	}
//	return;
//}
//int main()
//{
//	fgets(str, 8, stdin);
//	len = strlen(str);
//	if (str[len - 1] == '\n')str[len - 1] = '\0';
//	process(0, len - 1);
//	return 0;
//}


//#include<stdio.h>
//#include<math.h>
//int dfs(int m, int min)
//{
//	int count = 0;
//	if (m == 1)
//	{
//		return 1;
//	}
//	for (int i = min; i <=m; i++)
//	{
//		if (m % i == 0)
//		{
//			count += dfs(m / i, i);
//		}
//	}
//	return count;
//}
//int main()
//{
//	int n;
//	int m;
//	scanf("%d", &n);
//	while (n--)
//	{
//		scanf("%d", &m);
//		printf("%d\n", dfs(m, 2));
//	}
//	return 0;
//}

//#include<stdio.h>
//int dfs(int m)
//{
//	if (m == 1||m==2)
//	{
//		return 1;
//	}
//	else
//	{
//		return dfs(m - 1) + dfs(m - 2);
//	}
//}
//int main()
//{
//	int m;
//	int n;
//	scanf("%d", &n);
//	while (n--)
//	{
//		scanf("%d", &m);
//		printf("%d\n", dfs(m));
//	}
//	return 0;
//}

//#include<stdio.h>
//int dfs(int m)
//{
//	if (m == 1)
//	{
//		return 1;
//	}
//	if (m == 2)
//	{
//		return 2;
//	}
//	int n1 = 1;
//	int n2 = 2;
//	int sum = 0;
//	int temp;
//	for (int i = 3; i <= m; i++)
//	{
//		sum = ((2*(n2%32767)) + n1%32767)%32767;
//		n1 = n2;
//		n2 = sum;
//	}
//	return sum;
//}
//int main()
//{
//	int n, m;
//	scanf("%d", &n);
//	while (n--)
//	{
//		scanf("%d", &m);
//		printf("%d\n", dfs(m));
//	}
//	return 0;
//}


//#include<stdio.h>
//int dfs(int m)
//{
//	if (m == 1)
//	{
//		return 1;
//	}
//	else if (m == 2)
//	{
//		return 2;
//	}
//	else
//	{
//		return dfs(m - 1) + dfs(m - 2);
//	}
//}
//int main()
//{
//	int m;
//	while (scanf("%d", &m)!=EOF)
//	{
//		printf("%d\n", dfs(m));
//	}
//	return 0;
//}

//#include<stdio.h>
//void process(int n, char a, char c, char b)
//{
//	if (n == 1)
//	{
//		printf("%c->1->%c\n",a,b);
//		return;
//	}
//	process(n - 1, a, b, c);
//	printf("%c->%d->%c\n",a, n,b);
//	process(n - 1, c, a, b);
//	return;
//}
//int main()
//{
//	int n;
//	char a, b, c;
//	scanf("%d %c %c %c", &n, &a, &b, &c);
//	process(n, a, c, b);
//	return 0;
//}

#include<stdio.h>
int dfs(int m, int x)
{
	if (m == 0)return 1;
	if (x == 0)return 0;
	if (m < 0)return 0;
	return dfs(m, x - 1) + dfs(m - x, x);
}
int main()
{
	int n;
	scanf("%d", &n);
	while (n--)
	{
		int m, x;
		scanf("%d %d",&m,&x);
		printf("%d\n", dfs(m, x));
	}
	return 0;
}